﻿//----------------------------------------------------------------
// Desc: 
// Edit: ShowLong, http://blog.csdn.net/showlong
//
// Date Created: 2010-06-11
//
// Update Date : 
//
// Copyright (c) Fuel4D (http://www.fuel4d.com), All rights reserved.
//
//----------------------------------------------------------------
#pragma once


//----------------------------------------------------------------
//
//----------------------------------------------------------------
typedef BYTE    FIDENGINE;                  // 引擎的ID类型符号
typedef BYTE    FIDFONT;                    // 字体ID类型符号
typedef WORD    FIDTEXTURE;                 // 贴图ID类型符号
typedef WORD    FIDMODEL;                   // 模型ID类型符号
typedef WORD    FIDSPRITE;                  // 精灵动画ID类型符号


typedef void*   FTEXTURE_PTR;               // 贴图数据
typedef void*   FSURFACE_PTR;               // 表面数据
typedef void*   FVERTEX_PTR;                // 顶点数据
typedef void*   FVERTEXDECL_PTR;            // 顶点声明数据
typedef void*   FINDEX_PTR;                 // 索引数据


typedef FVector< FIDFONT >          FV_IDFONT;
typedef FVector< FIDTEXTURE >       FV_IDTEXTURE;
typedef FVector< FIDMODEL >         FV_IDMODEL;
typedef FVector< FIDSPRITE >        FV_IDSPRITE;


//----------------------------------------------------------------
//
//----------------------------------------------------------------
#define FE_DEF_BACKCOLOR        FARGB(255, 64, 128, 192)
#define FE_DEF_AMBIENT          0.20f, 0.20f, 0.20f
#define FE_DEF_SUNLIGHT_DIR     0.00f, 0.00f, -1.0f
#define FE_DEF_SUNLIGHT_COLOR   0.80f, 0.80f, 0.80f
#define FE_DEF_SKY_COLOR        0.25f, 0.50f, 0.75f
#define FE_DEF_WATER_COLOR      0.30f, 0.55f, 0.75f
#define FE_DEF_FOG_VALUE        100.0f, 1000.0f, 0.005f

#define FE_DEF_BRIGHTNESS       (0.0f)      // 默认亮度
#define FE_DEF_CONTRAST         (0.0f)      // 默认对比度


//----------------------------------------------------------------
// 设备类型
//----------------------------------------------------------------
enum EF_DEVICE_TYPE
{
    eDT_UNKNOWN,                            // 未知渲染底层

    eDT_D3D9,                               // DirectX 9.0   渲染底层（支持）
    eDT_D3D11,                              // DirectX 11.0  渲染底层（不支持）
    eDT_GLES2,                              // OpenGL ES 2.0 渲染底层（支持）

    eDT_USER,                               // 用户自定义渲染层

    EF_DEVICE_TYPE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
// 程序运行环境配置（关闭不需要的环境将节省程序内存）
//----------------------------------------------------------------
enum EF_ENV_TYPE
{
    // 2D可以切换管线模式（以下二选一）
    eET_2D_Fixed                = 1<<0,     // 使用固定管线（2D环境，shader不支持时自动切到此管线）
    eET_2D_Shader               = 1<<1,     // 使用SHADER管线（需SM2.0）

    // 3D只能使用shader，但可以选择哪些开启，以适应不同的游戏类型（模型渲染二选一）
    eET_3D_Fixed_Model          = 1<<10,    // 使用cpu计算模型渲染支持（shader模型渲染不支持时自动切到此模式）
    eET_3D_Shader_Model         = 1<<11,    // 使用shader模型渲染支持（需SM2.0）
    eET_3D_World                = 1<<12,    // 开启世界渲染支持，自动开启模型、地表、植被、水面渲染（需SM3.0）

    EF_ENV_TYPE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
// 贴图类型
//----------------------------------------------------------------
enum EF_TEXTURE_TYPE
{
    eTT_Default,                            // 默认贴图类型
    eTT_WriteOnly,                          // 只写

    eTT_RenderTarget,                       // 渲染目标贴图
    eTT_DepthStencil,                       // 深度模板贴图
    eTT_Dynamic,                            // 动态贴图

    EF_TEXTURE_TYPE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
// 贴图锁定模式
//----------------------------------------------------------------
enum EF_TEXTURE_LOCK
{
    eTL_Normal                  = 1<<0,     // 普通锁定
    eTL_ReadOnly                = 1<<1,     // 只读
    eTL_Discard                 = 1<<2,     // 丢弃

    EF_TEXTURE_LOCK_FORCE = 0xFFFF,
};


//----------------------------------------------------------------
// 表面格式
//----------------------------------------------------------------
enum EF_FORMAT
{
    eFMT_UNKNOWN,

    eFMT_A8R8G8B8,
    eFMT_X8R8G8B8,
    eFMT_A8B8G8R8,
    eFMT_X8B8G8R8,
    eFMT_A16B16G16R16,
    eFMT_A16B16G16R16F,
    eFMT_A32B32G32R32F,

    eFMT_D16,
    eFMT_D32,
    eFMT_D24S8,
    eFMT_D24X8,

    eFMT_DXT1,
    eFMT_DXT3,
    eFMT_DXT5,

    eFMT_A8L8,
    eFMT_V8U8,

    EF_FORMAT_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_POOL
{
    ePL_Default,
    ePL_Managed,
    ePL_SystemMem,
    ePL_Scratch,

    EF_POOL_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_MULTI_SAMPLE
{
    eMS_Mone,
    eMS_NonMaskable,
    eMS_2_Samples,
    eMS_3_Samples,
    eMS_4_Samples,
    eMS_5_Samples,
    eMS_6_Samples,
    eMS_7_Samples,
    eMS_8_Samples,
    eMS_9_Samples,
    eMS_10_Samples,
    eMS_11_Samples,
    eMS_12_Samples,
    eMS_13_Samples,
    eMS_14_Samples,
    eMS_15_Samples,
    eMS_16_Samples,

    EF_MULTI_SAMPLE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_TRANSFORM_TYPE
{
    eTT_View,
    eTT_Projection,
    eTT_World,
    eTT_World1,
    eTT_World2,
    eTT_World3,
    eTT_Texture0,
    eTT_Texture1,
    eTT_Texture2,
    eTT_Texture3,
    eTT_Texture4,
    eTT_Texture5,
    eTT_Texture6,
    eTT_Texture7,

    EF_TRANSFORM_TYPE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_PRIMITIVE_TYPE
{
    ePVT_POINTLIST,
    ePVT_LINELIST,
    ePVT_LINESTRIP,
    ePVT_TRIANGLELIST,
    ePVT_TRIANGLESTRIP,
    ePVT_TRIANGLEFAN,

    EF_PRIMITIVE_TYPE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_MATERIAL_TYPE
{
    eMT_Default,                            // 普通贴图
    eMT_Gloss,                              // 光泽贴图（高光贴图）
    eMT_Emissive,                           // 自发光贴图
    eMT_Normal,                             // 法线贴图

    eMT_MaxType = 4,                        // 单次渲染最大支持的贴图材质数量

    EF_MATERIAL_TYPE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_SHADE_MODE_TYPE
{
    eSMT_NO,                                // 不着色
    eSMT_Normal,                            // 只有太阳光照
    eSMT_Gouraud,                           // Gouraud着色
    eSMT_Metal,                             // 金属着色
    eSMT_Blinn,                             // Blinn-Phong着色

    EF_SHADE_MODE_TYPE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_CLEAR_FLAGS
{
    eCF_Target              = 1<<0,
    eCF_ZBuffer             = 1<<1,
    eCF_Stencil             = 1<<2,

    eCF_T_Z                 = eCF_Target|eCF_ZBuffer,
    eCF_All                 = 0xFFFF,

    EF_CLEAR_FLAGS_FORCE = 0xFFFF
};

//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_RENDER_FLAGS
{
    eRF_ZEnable             = 1<<0,         // 开启Z缓冲区
    eRF_ZWrite              = 1<<1,         // 开启Z写入
    eRF_CullCW              = 1<<2,         // 顺时针模式背面裁减
    eRF_CullCCW             = 1<<3,         // 逆时针模式背面裁减
    eRF_WireFrame           = 1<<4,         // 线框模式
    eRF_AlphaTest           = 1<<5,         // 打开alpha测试,0x80为测试值
    eRF_AlphaBlend          = 1<<6,         // 打开alpha混合
    eRF_ColorAdd            = 1<<7,         // 颜色叠加
    eRF_ColorSub            = 1<<8,         // 颜色减法
    eRF_ColorMod2           = 1<<9,         // 混合结果乘2倍
    eRF_ColorMod4           = 1<<10,        // 混合结果乘4倍
    eRF_TextureFilter       = 1<<11,        // 贴图放大、缩小采样为:线性
    eRF_DstBlendOne         = 1<<12,        // 重叠当前颜色

    eRF_Default2D           = eRF_AlphaBlend,
    eRF_Default3D           = eRF_ZEnable|eRF_ZWrite|eRF_CullCW|eRF_TextureFilter,
    eRF_3DNoMaterial        = eRF_ZEnable|eRF_ZWrite|eRF_CullCW,
    eRF_3DEffect            = eRF_ZEnable|eRF_AlphaBlend|eRF_TextureFilter,

    // 注意：
    // 1. 一般情况下eRF_TextureFilter足够解决贴图锯齿问题
    // 2. 3D环境开启mipmap可以解决撕裂问题
    // 3. eRF_ColorAdd，eRF_ColorSub，eRF_ColorMod2，eRF_ColorMod4 四者只能同时存在一种，优先级按值从小到大排列
    // 4. eRF_CullCW优先级高于eRF_CullCCW

    EF_RENDER_FLAGS_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_REVERSAL_MODE
{
    eRM_None,                               // 不翻转
    eRM_Horizontal,                         // 水平翻转
    eRM_Vertical,                           // 垂直翻转
    eRM_HV_Both,                            // 横纵同时翻转

    EF_REVERSAL_MODE_FORCE = 0xFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_FONT_EFFECT
{
    eFE_Normal              = 0,            // 普通绘制
    eFE_Shadow              = 1,            // 阴隐绘制
    eFE_Fringe              = 2,            // 描边绘制（尽量少用）
    eFE_Projection          = 3,            // 投影绘制（暂不支持）

    EF_FONT_EFFECT_FORCE = 0xFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_FONT_ALIGN
{
    eFA_LEFT                = 0x00000000,   // 横向：左
    eFA_CENTER              = 0x00000001,   // 横向：中
    eFA_RIGHT               = 0x00000002,   // 横向：右
    eFA_TOP                 = 0x00000000,   // 纵向：上
    eFA_VCENTER             = 0x00000004,   // 纵向：中
    eFA_BOTTOM              = 0x00000008,   // 纵向：下
    eFA_AUTOBREAK           = 0x00000010,   // 自动换行，换行后不控制行数量
    eFA_SINGLELINE          = 0x00000020,   // 单行对齐模式，否则将多行视为一行从而整体对齐

    EF_FONT_ALIGN_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
// 0123456789,.+-:
//----------------------------------------------------------------
enum EF_NUMBER_TYPE
{
    eNT_0, eNT_1, eNT_2, eNT_3, eNT_4,      // 01234
    eNT_5, eNT_6, eNT_7, eNT_8, eNT_9,      // 56789
    eNT_COMMA, eNT_DOT,                     // ,.
    eNT_ADD, eNT_MINUS,                     // +-
    eNT_SEMICONLON,                         // :

    eNT_MAX,

    EF_NUMBER_TYPE_FORCE = 0xFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_NUMBER_RENDER
{
    eNR_LEFT,                               // 以指定点从左到右绘制
    eNR_RIGHT,                              // 以指定点从右到左绘制
    eNR_CENTER,                             // 以指定点为中心绘制

    EF_NUMBER_RENDER_FORCE = 0xFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_NUMBER_FLAGS
{
    eNF_INT,                                // pvl = (int*)
    eNF_FLOAT,                              // pvl = (float*)
    eNF_TIME_HM,                            // pvl = (int*)，且以24小时制时钟方式渲染，单位分(18:55)
    eNF_TIME_HMS,                           // pvl = (int*)，且以24小时制时钟方式渲染，单位秒(18:55:31)

    eNF_COMMA3              = 1<<16,        // 整数部分，每隔3个数字显示一个逗号
    eNF_ADD                 = 1<<17,        // 整数部分，且是正数，显示+号
    eNF_BIT2                = 1<<18,        // 符点数时，2位小数
    eNF_BIT4                = 1<<19,        // 符点数时，4位小数

    eNF_MK_TYPE             = 0x0000ffff,
    eNF_MK_EXTEND           = 0xffff0000,

    EF_NUMBER_FLAGS_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_FONT_GRAD_MODE
{
    eFGM_Char,                              // 以单个字为单位处理
    eFGM_Line,                              // 以行为单位处理（多行时）
    eFGM_String,                            // 以整个串为单位
    eFGM_Whole,                             // 以整体面板为单位

    EF_FONT_GRAD_MODE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_CONST_DATA_ENGINE
{
    eCD_UnknownState        = 0,            // 无效应用程序状态值

    eCD_MaxEngine           = 16,           // Fuel4D最大可以同时创建多个少引擎对象（范围0-0xFF）

    eCD_DefFontID           = 0,            // 默认字体ID，由引擎自动创建的字体，可修改参数（此值固定为0）
    eCD_DefFntColor         = 0xFFF0F0F0,   // 默认文字颜色（白色）
    eCD_DefFntEffect        = 0xFF323232,   // 默认文字效果颜色（灰色）
    eCD_DefFntTexSize       = 512,          // 字体贴图尺寸（1<<9 = 512）
    eCD_MaxFont             = 8,            // 最大支持字体套数（含默认字体）
    eCD_MinFontSize         = 12,           // 最小字体尺寸（底于此尺寸的字体请用贴图处理）
    eCD_MaxFontSize         = 64,           // 最大字体尺寸（高于此尺寸的字体请用贴图处理）
    eCD_MaxFontName         = 128,          // 字体名最大长度

    eCD_DefTextureID        = 0,            // 默认贴图ID（此值固定为0）
    eCD_AutoTexBegin        = 20000,        // 系统贴图组的ID开始值（含本值），小于此值为用户注册贴图组（用户贴图组一旦注册，ID永远不变化，仅贴图可以消毁）
    eCD_TerrainBegin        = 30000,        // 地形贴图组的ID开始值（含本值）
    eCD_MaxTexture          = 35000,        // 整个引擎同时在内存中最大支持贴图数量（含字体贴图）
    eCD_ErrorTex            = 0xFFFF,       // 无效贴图ID

    eCD_DefModelID          = 0,            // 默认模型ID（此值固定为0）
    eCD_AutoModBegin        = 20000,        // 系统分配的模型ID开始值，含本值，小于此值的可用户注册模型ID
    eCD_MaxModel            = 30000,        // 整个引擎同时在内存中最大支持多少个模型
    eCD_ErrorModel          = 0xFFFF,       // 无效模型ID
    eCD_MaxModelParticle    = 250,          // 单个粒子发射器最多能同时看到的粒子数量
    eCD_MaxModelRibbon      = 32,           // 单个刀光发射器能同时看到的刀光切线数量，两条切线组成一个切面

    eCD_DefSpriteID         = 0,            // 默认精灵动画ID（此值固定为0）
    eCD_MaxSprite           = 250,          // 引擎中最大可同时存在的精灵动画文件数量（范围0-0xFFFF）
    eCD_ErrorSprite         = 0xFFFF,       // 无效精灵动画ID
    eCD_MaxSprParticle      = 1000,         // 引擎中最大可同时存在的精灵粒子发射器数量（范围0-0xFFFF）

    eCD_MaxPointolite       = 16,           // 最大支持同时渲染的点光源数量

    eCD_FMD_MaxBone         = 250,          // 模型文件最大支持骨骼数量（范围：0-0xFF）
    eCD_FMD_MaxSubBone      = 55,           // 模型文件单个子集最大可以与多少根骨骼产生关系（范围：0-0xFF，具体还要看显卡能力）
    eCD_FMD_MaxTexture      = 100,          // 模型文件最大支持多少张贴图（范围：0-0xFF）
    eCD_FMD_MaxBillboard    = 200,          // 模型文件最大支持多少广告牌（范围：0-0xFF）
    eCD_FMD_MaxParticle     = 64,           // 模型文件最大支持粒子发射器数量（范围：0-0xFF）
    eCD_FMD_MaxRibbon       = 16,           // 模型文件最大支持刀光发射器数量（范围：0-0xFF）
    eCD_FMD_MaxAppendPoint  = 64,           // 模型文件最大支持附挂点数量（范围：0-0xFF）
    eCD_FMD_MaxLight        = 16,           // 模型文件最大支持灯光数量（范围：0-0xFF）
    eCD_FMD_MaxCamera       = 32,           // 模型文件最大支持摄像机数量（范围：0-0xFF）
    eCD_FMD_MaxSubset       = 200,          // 模型文件最多出现子集数（含自动材质拆分子集）（范围：0-0xFF）
    eCD_FMD_MaxVertex       = 12000,        // 模型文件单个子集最多允许顶点数（范围：0-0xFFFF）
    eCD_FMD_MaxFace         = 15000,        // 模型文件单个子集最多允许面数（范围：0-0xFFFF）
    eCD_FMD_ColiMaxVertex   = 180,          // 模型文件单个碰撞对象最多允许顶点数（范围：0-0xFFFF）
    eCD_FMD_ColiMaxFace     = 240,          // 模型文件单个碰撞对象最多允许面数（范围：0-0xFFFF）
    eCD_FMD_MaxAnimKey      = 12000,        // 模型文件最大材质动画帧数，也是骨骼动画帧数，即整个MAX文件总帧数（范围：0-0xFFFF）
    eCD_FMD_ErrorAnimKey    = 0xFFFF,       // 模型文件无效动画帧ID
    eCD_FMD_ErrorBone       = 0xFF,         // 模型文件无效骨骼索引
    eCD_FMD_ErrorTexture    = 0xFF,         // 模型文件无效贴图索引
    eCD_FMD_ErrorBlend      = 0xFF,         // 模型文件无效混合索引

    eCD_Max2DQuadCount      = 8192,         // 默认2D缓冲区四边形数量初始化数量，即精灵数量（1个精灵=2个三角形=4个顶点=6个索引）
    eCD_Max3DSubsetNormal   = 1280,         // 当前帧最大可以渲染普通子集数量（集合）
    eCD_Max3DSubsetAlpha    = 768,          // 当前帧最大可以渲染透明混合子集数量（集合）
    eCD_Max3DLineVert       = 20000,        // 当前帧最大可以渲染的3D线条顶点数量（顶点）
    eCD_Max3DNoMatVert      = 40000,        // 当前帧最大可以渲染的无材质3D顶点数量（顶点）
    eCD_MaxBillboardVert    = 50000,        // 当前帧最大可以渲染的广告牌顶点数量（即3D雪花，粒子，广告等）
    eCD_MaxRibbonVert       = 20000,        // 当前帧最大可以渲染的刀光顶点数量（刀光等）

    eCD_FSD_MaxActiveSprite = 512,          // 2D粒子发射器同时最大生存粒子数量（范围：0-0xFFFF）
    eCD_FSD_MaxBonePoint    = 250,          // 精灵动画中 最大骨点数（范围：0-0xFF）
    eCD_FSD_ErrorBonePoint  = 0xFF,         // 精灵动画中 无效骨骼点索引
    eCD_FSD_MaxBoneAnimate  = 12000,        // 精灵动画中 骨骼动画最大帧数（范围0-32000）
    eCD_FSD_ErrorBoneAnim   = 0xFFFF,       // 精灵动画中 无效动画帧ID
    eCD_FSD_MaxBoneFraq     = 500,          // 精灵动画中 骨骼动画的最大频率（帧/秒）（范围0-999）
    eCD_FSD_MaxAction       = 250,          // 精灵动画中 最大动画数量（范围：0-0xFF）

    eCD_CHUNK_HEIGHT_SIZE_W = 16,           // 地形高程图尺寸，单位：象素（必须是2的幂）
    eCD_CHUNK_HEIGHT_SIZE_H = eCD_CHUNK_HEIGHT_SIZE_W,
    eCD_CHUNK_ALPHA_SIZE_W  = eCD_CHUNK_HEIGHT_SIZE_W<<2,       // 混合图尺寸，单位：象素（必须是2的幂）
    eCD_CHUNK_ALPHA_SIZE_H  = eCD_CHUNK_HEIGHT_SIZE_H<<2,
    eCD_WORLD_SCALE         = 4,            // 世界数据1个单位格子与距离单位米之间的比例
    eCD_CHUNK_DETAL_SCALE   = 4,            // 地表贴图细节放大倍数
    eCD_MAP_LOCAL_W         = ((eCD_CHUNK_HEIGHT_SIZE_W-1)<<3)*eCD_WORLD_SCALE,     // 单个局部尺寸，单位：米
    eCD_MAP_LOCAL_H         = ((eCD_CHUNK_HEIGHT_SIZE_H-1)<<3)*eCD_WORLD_SCALE,
    eCD_MAP_LOCAL_RADIUS    = (eCD_MAP_LOCAL_W+eCD_MAP_LOCAL_H)>>2,
    eCD_MAP_LOCAL_RADIUS_RQ = eCD_MAP_LOCAL_RADIUS*eCD_MAP_LOCAL_RADIUS,
    eCD_MAP_SIZE_W          = eCD_MAP_LOCAL_W*50,               // 地图单边最大尺寸，单位：米
    eCD_MAP_SIZE_H          = eCD_MAP_LOCAL_H*50,
    eCD_CHUNK_COUNT_W       = eCD_MAP_LOCAL_W/((eCD_CHUNK_HEIGHT_SIZE_W-1)*eCD_WORLD_SCALE),// 单个局部中地块数量
    eCD_CHUNK_COUNT_H       = eCD_MAP_LOCAL_H/((eCD_CHUNK_HEIGHT_SIZE_H-1)*eCD_WORLD_SCALE),
    eCD_CHUNK_VTX_COUNT     = eCD_CHUNK_HEIGHT_SIZE_W*eCD_CHUNK_HEIGHT_SIZE_H,
    eCD_CHUNK_FACE_COUNT    = (eCD_CHUNK_HEIGHT_SIZE_H-1)*(eCD_CHUNK_HEIGHT_SIZE_W-1)*2,
    eCD_CHUNK_IDX_BUF_SIZE  = eCD_CHUNK_FACE_COUNT*3,
    eCD_CHUNK_ALPHA_LAYER   = 5,            // 最大地形混合图层数（第0层不混合）
    eCD_CHUNK_BLEND_TEX     = 3,            // 每层混合图的贴图数（基础图+法线图+备用贴图）

    eCD_MapChunkW           = (eCD_CHUNK_HEIGHT_SIZE_W-1)<<1,
    eCD_MapChunkH           = (eCD_CHUNK_HEIGHT_SIZE_H-1)<<1,

    eCD_VegetationBatch     = 110,          // 渲染植被单次最大渲染多少棵（此值和SM版本常量寄存器上限有关DX9共256个）
    eCD_VegetationSection   = 1,            // 植被面片分段数
    eCD_VegetationVtx       = (eCD_VegetationSection+1)<<1,// 单棵植被项点数
    eCD_VegetationIdx       = (eCD_VegetationVtx-2)*3,     // 单棵植被索引数
    eCD_VegetationMaxVtx    = eCD_VegetationBatch*eCD_VegetationVtx,    // 植被项点缓冲大小
    eCD_VegetationMaxIdx    = eCD_VegetationBatch*eCD_VegetationIdx,    // 植被索引缓冲大小
    eCD_VegetationMaxType   = 4,            // 单个地形中允许出现的植被贴图种数
    eCD_VegetationInChunk   = (eCD_VegetationBatch<<1)*eCD_CHUNK_DETAL_SCALE*eCD_WORLD_SCALE, // 单个地块中某层植被最多株数

    eCD_SceneBuildMax       = 25000,        // 场景物件上限
    eCD_SceneSoundMax       = 250,          // 场景中可以放置的声音对象个数
    eCD_ErrorSceneObj       = 0,            // 无效场景对象ID

    EF_CONST_DATA_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_RENDER_COMMIT_FLAGS
{
    // 3D
    eRCF_3D_Skybox          = 1<<0,         // 天空盒
    eRCF_3D_Terrain         = 1<<1,         // 地形地表
    eRCF_3D_Vegetation      = 1<<2,         // 植被
    eRCF_3D_Water           = 1<<3,         // 水面
    eRCF_3D_Subset          = 1<<4,         // 模型子集
    eRCF_3D_Line            = 1<<5,         // 线条
    eRCF_3D_Ribbon          = 1<<6,         // 光刀
    eRCF_3D_Billboard       = 1<<7,         // 广告牌
    eRCF_3D                 = 0x00FFFFFF,   // 3D全部

    // 2D
    eRCF_2D_Sprite          = 1<<24,        // 2D精灵
    eRCF_2D                 = 0xFF000000,   // 2D全部

    eRCF_All                = 0xFFFFFFFF,   // 全部

    EF_RENDER_COMMIT_FLAGS_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
// 渲染PASS自动提交设置
//----------------------------------------------------------------
enum EF_PASS_AUTO_SET
{
    ePAS_WVP        = 1<<0,                 // World * View * Projection
    ePAS_Time       = 1<<1,                 // Work Time
    ePAS_Eye        = 1<<2,                 // Eye Postion
    ePAS_LT_Dir     = 1<<3,                 // Light Dir
    ePAS_LT_Color   = 1<<4,                 // Light Color
    ePAS_LT_Mode    = 1<<5,                 // Light Mode
    ePAS_Ambient    = 1<<6,                 // Global Ambient
    ePAS_Fog        = 1<<7,                 // Fog
    ePAS_Back       = 1<<8,                 // Back Color
    ePAS_Color_OT	= 1<<9,                 // Color Operation
    ePAS_Color_AP   = 1<<10,                // Color Append

    ePAS_ALL = 0xffffffff
};


//----------------------------------------------------------------
// 颜色补尝模式（只处理RGB，不管Alpha）
//----------------------------------------------------------------
enum EF_COLOR_APPEND_FLAGS
{
    eCAF_None,                              // 不补尝
    eCAF_Add,                               // 颜色叠加
    eCAF_Sub,                               // 颜色减法
    eCAF_Mod,                               // 颜色相乘
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_SPRITE_TILE_DRAW_MODE
{
    eSTDM_Normal_LT,                // 普通左上
    eSTDM_Normal_RT,                // 普通右上
    eSTDM_Normal_LB,                // 普通左下
    eSTDM_Normal_RB,                // 普通右下
    eSTDM_ExtendFull,               // 缩放拉伸
    eSTDM_Fill_Four_Corner,         // 填充四角
    eSTDM_Put_Left_Center,          // 放置左中
    eSTDM_Put_Right_Center,         // 放置右中
    eSTDM_Put_Top_Center,           // 放置上中
    eSTDM_Put_Bottom_Center,        // 放置下中
    eSTDM_Put_Center,               // 放置正中
    eSTDM_Tiled_Normal,             // 平面平铺
    eSTDM_Tiled_Horizontal,         // 横向平铺
    eSTDM_Tiled_Vertical,           // 纵向平铺
    eSTDM_Tiled_NinePAL,            // 九宫平铺
    eSTDM_Tiled_H_Single,           // 单行横铺
    eSTDM_Tiled_V_Single,           // 单行纵铺

    EF_SPRITE_TILE_DRAW_MODE_FORCE = 0xFF,
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_FMD_SUBSET_TYPE
{
    eFMST_Unknown,                          // 未知对象

    // MAX网格对象改名产生
    eFMST_Mesh              = 20,           // 普通模型对象（默认对象）
    eFMST_NoMaterial,                       // 无材质对象（自动产生）
    eFMST_Leaf,                             // 树叶
    eFMST_Trunk,                            // 树杆
    eFMST_Billboard,                        // 广告牌
    eFMST_Particle,                         // 粒子发射器
    eFMST_Ribbon,                           // 刀光发射器
    eFMST_Decal,                            // 贴地纸
    eFMST_Floor,                            // 地板
    eFMST_Collision,                        // 碰撞
    eFMST_AppendPoint,                      // 附挂点
    eFMST_SkyBox,                           // 天空盒

    // MAX实体对象导出
    eFMST_Light                     = 40,   // 灯光
    eFMST_Camera,                           // 摄像机
    eFMST_Spline,                           // 轨迹链

    EF_FMD_SUBSET_TYPE_FORCE = 0xFFFF
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_FMD_PARTICLE_LAUNCH_TYPE
{
    eFMPL_Panel,                            // 平面发射
    eFMPL_PanelFringe,                      // 平面边缘
    eFMPL_Ellipse,                          // 椭圆发射
    eFMPL_EllipseFringe,                    // 椭圆边缘
    eFMPL_Point,                            // 定点发射

    eFMPL_Max,

    EF_FMD_PARTICLE_LAUNCH_TYPE_FORCE = 0xFF
};
const NCHAR FMD_PARTICLE_LAUNCH_COMBO[] = _T("平面发射|平面边缘|椭圆发射|椭圆边缘|定点发射|");


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_FMD_PARTICLE_MOVE_MODE
{
    eFMPM_Normal,                           // 正常模式
    eFMPM_ToCenter,                         // 向心
    eFMPM_ToOutside,                        // 向外
    eFMPM_Disarrange,                       // 扰乱

    eFMPM_Max,

    EF_FMD_PARTICLE_MOVE_MODE_FORCE = 0xFF
};
const NCHAR FMD_PARTICLE_MOVEMODE_COMBO[] = _T("正常模式|向心|向外|扰乱|");


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_FMD_PARTICLE_SQUIRT_MODE
{
    eFMPS_Normal,                           // 自然频率不定数量喷出
    eFMPS_All,                              // 一次性全部喷射
    eFMPS_Intermittency,                    // 间歇性喷出（需要设置喷射参数）

    eFMPS_Max,

    EF_FMD_PARTICLE_SQUIRT_MODE_FORCE = 0xFF
};
const NCHAR FMD_PARTICLE_SQUIRT_COMBO[] = _T("自然随机|一次性喷射|间歇性喷出|");


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_FMD_PARTICLE_SPRITE_TYPE
{
    eFMPT_Normal,                           // 普通精灵类型
    eFMPT_Tail,                             // 拖尾（需要设置类型参数）

    eFMPT_Max,

    EF_FMD_PARTICLE_SPRITE_TYPE_FORCE = 0xFF
};
const NCHAR FMD_PARTICLE_SPRITE_COMBO[] = _T("普通精灵|拖尾精灵|");


//----------------------------------------------------------------
//
//----------------------------------------------------------------
const DWORD FMD_PARTICLE_BLEND_TYPE[] = 
{
    0,
    eRF_ColorAdd,
    eRF_ColorSub,
    eRF_ColorMod2,
    eRF_ColorMod4,
    eRF_DstBlendOne,
};
const NCHAR FMD_PARTICLE_BLEND_COMBO[] = _T("正常混合|颜色叠加|颜色减法|混合结果乘2|混合结果乘4|颜色重叠|");


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_CAMERA_VIEW_MODE
{
    eCVM_UserDefined,                       // 用户定义模式，摄像机自己不处理任何逻辑
    eCVM_3dsmax,                            // 操作快捷键与3dsmax一样
    eCVM_Flying,                            // 操作快捷键为飞行模式
    eCVM_Role,                              // 第一人称角色视角

    // 操作说明：
    //  eCVM_UserDefined，游戏自己控制鼠标与键盘逻辑
    //  eCVM_3dsmax，鼠标中键移动屏幕，鼠标中键+ALT旋转屏幕，鼠标滚轮调整远近
    //  eCVM_Flying，W前进，S后退，A左移，D右移，Q上升，E下降，Z左偏航，X右偏移，鼠标右键拖屏幕
    //  eCVM_Role，鼠标右键旋转屏幕，需要调用SetRolePosition更新角色坐标

    EF_CAMERA_VIEW_MODE_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
// 场景属性标记
//----------------------------------------------------------------
enum EF_SCENE_PROPERTY
{
    eSP_PK                  = 1<<0,         // 允许PK
    eSP_Ride                = 1<<1,         // 允许骑马
    eSP_SingleDuplicate     = 1<<2,         // 单人副本
    eSP_MultDeplicate       = 1<<3,         // 多人副本（不用组队）
    eSP_TeamDuplicate       = 1<<4,         // 组队副本

    // ... 其它属性自定义

    eSP_Default = 0,

    EF_SCENE_PROPERTY_FORCE = 0xFFFFFFFF
};


//----------------------------------------------------------------
// 场景环境的类型
//----------------------------------------------------------------
enum EF_SCENE_ENV_TYPE
{
    eSET_Open               = 1<<0,         // 环境效果总开关
    eSET_Sunny              = 1<<1,         // 晴天，有太阳
    eSET_Overcast           = 1<<2,         // 阴天，没太阳（和晴天冲突，同时存在时优先选择晴天）
    eSET_Gale               = 1<<3,         // 大风（会影响树叶、植被、水面等的摆动幅度）
    eSET_Rain               = 1<<4,         // 有雨
    eSET_Snow               = 1<<5,         // 有雪
    eSET_Thunder            = 1<<6,         // 有雷电

    EF_SCENE_ENV_TYPE_FORCE = 0xffff
};


//----------------------------------------------------------------
//
//----------------------------------------------------------------
enum EF_SUBSET_DRAW_TYPE
{
    eSDT_NoMaterial,                // 无材质的
    eSDT_Default,                   // 贴图+面片(顶点/法线/UV)
    eSDT_Default_Normal,            // 贴图+面片(顶点/法线/UV/切线)
    eSDT_Default_Bone,              // 贴图+面片(顶点/法线/UV/骨骼混合)
    eSDT_Default_Bone_Normal,       // 贴图+面片(顶点/法线/UV/切线/骨骼混合)

    eSDT_Max,
};